// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Utils
//
//		Irrlicht node utils
//
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once


class CAdvancedMeshCollision;

////////////////////////////////////////////////////////////////////////////////////////////////////

#include <irrlicht.h>

using namespace irr;

class Utils
{

// ** Static Methods
// ////////////////////////////////////////////////////////
public:
			
	
	static bool ComputeBoundingBox(irr::scene::ISceneNode* node);
	static bool ComputeBoundingBoxLevelObject(irr::scene::ISceneNode* node);
	static bool ComputeBoundingBoxLevelObject(irr::scene::ISceneNode* node, irr::core::aabbox3df& box, bool& hasABox, irr::scene::ISceneNode* root );

	static void ReadAllLightmapTextures(irr::scene::ISceneNode* node);

	static void GetMeshCollisionTriangles(irr::core::array<irr::core::triangle3df>& triangles, 
								CAdvancedMeshCollision** collision_array, s32 count);

	static irr::scene::IMesh* GetMesh(irr::scene::ISceneNode* node);
	static void CreateMeshCollisionArray(irr::scene::ISceneNode* node, CAdvancedMeshCollision** collision_array, s32& count);
	static bool GetMeshCollisionIntersectWithColor(const irr::core::line3d<irr::f32>& ray, 
										CAdvancedMeshCollision** collision_array, s32 count,
										irr::core::vector3df& collisionPoint, irr::core::triangle3df& collisionTriangle,
										u32& color);

};



// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  Implementation /////////////////////////////////////////////////////////////////////////////////////////////////////////
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


